Logo-ITESO-Principal%20%281%29.jpg

MAF1731 - Microstructure and Trading Systems

María Fernanada Amador Alvarez Ana Sofía Durrmuller Acosta Gerardo González Flores Maximiliano Garcia Mora

Marzo 2023 | Repository: Link

Módulo 3¶

Behavioral Finance

Abstract¶

Se tiene una semana (7 días) de trading para poder elaborar este laboratorio. Gracias al laboratorio, es que podemos llevar a cabo este laboratorio.

1. Introducción¶

Este laboratorio tiene como propósito particular el elaborar herramientas para el análisis del desempeño de la actividad de trading, desde el punto de vista de la cuenta y desde el punto de vista de la persona que opera la cuenta (trader). Por lo tanto, este laboratorio estará dividido en 4 partes, cada una, servirá para cumplir con la estructura básica de proyectos para sistemas de trading y las otras 3 partes son relacionadas cada una a los propósitos del módulo completo.

2. Install/Load Packages and Dependencies¶

In [ ]:
# Librerías
import functions
import visualizations
import pandas as pd
import plotly.io as pio

2.1 Files Dependencies¶

A continuación se presentan las dependencias de archivo necesarias para correr este cuaderno.

  • files/s&p 500 (con la consulta de las fechas en las que realizamos el laboratorio 2)

3. Data Visualization¶

Fernanda Amador

In [ ]:
f_FA = (functions.f_leer_archivo("files/Positions_FA.csv")
     .pipe(functions.f_columnas_tiempos)
     .pipe(functions.f_columnas_pips))
In [ ]:
tab_rank_FA = functions.f_estadisticas_ba(f_FA)
tab_rank_FA["df_1_tabla"]
Out[ ]:
medida valor descripcion
0 ops totales 34.000000 operaciones totales
1 ganadoras 13.000000 operaciones ganadoras
2 ganadoras_c 12.000000 operaciones ganadoras de compra
3 ganadoras_v 1.000000 operaciones ganadoras de venta
4 perdedoras 21.000000 operaciones perdedoras
5 perdedoras_c 16.000000 operaciones perdedoras de compra
6 perdedoras_v 5.000000 operaciones perdedoras de venta
7 mediana (profit) -0.016500 mediana de profit de operaciones
8 mediana (pips) -0.007500 mediana de pips de operaciones
9 r_efectividad 0.382353 ganadoras totales/operaciones totales
10 r_proporcion 0.619048 ganadoras totales/perdedoras totales
11 r_efectividad_c 0.352941 ganadoras compras/operaciones totales
12 r_efectividad_v 0.029412 ganadoras ventas/operaciones totales

Ana Dürrmüller

In [ ]:
f_AD = (functions.f_leer_archivo("files/Positions_AD.csv")
     .pipe(functions.f_columnas_tiempos)
     .pipe(functions.f_columnas_pips))
In [ ]:
tab_rank_AD = functions.f_estadisticas_ba(f_AD)
tab_rank_AD["df_1_tabla"]
Out[ ]:
medida valor descripcion
0 ops totales 23.000000 operaciones totales
1 ganadoras 8.000000 operaciones ganadoras
2 ganadoras_c 6.000000 operaciones ganadoras de compra
3 ganadoras_v 2.000000 operaciones ganadoras de venta
4 perdedoras 15.000000 operaciones perdedoras
5 perdedoras_c 14.000000 operaciones perdedoras de compra
6 perdedoras_v 1.000000 operaciones perdedoras de venta
7 mediana (profit) -0.193880 mediana de profit de operaciones
8 mediana (pips) -0.063000 mediana de pips de operaciones
9 r_efectividad 0.347826 ganadoras totales/operaciones totales
10 r_proporcion 0.533333 ganadoras totales/perdedoras totales
11 r_efectividad_c 0.260870 ganadoras compras/operaciones totales
12 r_efectividad_v 0.086957 ganadoras ventas/operaciones totales

Gerardo Gónzalez

In [ ]:
f_GG = (functions.f_leer_archivo("files/Positions_GG.csv")
     .pipe(functions.f_columnas_tiempos)
     .pipe(functions.f_columnas_pips))
In [ ]:
tab_rank_GG = functions.f_estadisticas_ba(f_GG)
tab_rank_GG["df_1_tabla"]
Out[ ]:
medida valor descripcion
0 ops totales 30.000000 operaciones totales
1 ganadoras 13.000000 operaciones ganadoras
2 ganadoras_c 7.000000 operaciones ganadoras de compra
3 ganadoras_v 6.000000 operaciones ganadoras de venta
4 perdedoras 17.000000 operaciones perdedoras
5 perdedoras_c 14.000000 operaciones perdedoras de compra
6 perdedoras_v 3.000000 operaciones perdedoras de venta
7 mediana (profit) -0.040845 mediana de profit de operaciones
8 mediana (pips) -0.037000 mediana de pips de operaciones
9 r_efectividad 0.433333 ganadoras totales/operaciones totales
10 r_proporcion 0.764706 ganadoras totales/perdedoras totales
11 r_efectividad_c 0.233333 ganadoras compras/operaciones totales
12 r_efectividad_v 0.200000 ganadoras ventas/operaciones totales

Maximiliano García

In [ ]:
f_MG = (functions.f_leer_archivo("files/Positions_MGM.csv")
     .pipe(functions.f_columnas_tiempos)
     .pipe(functions.f_columnas_pips))
In [ ]:
tab_rank_MG = functions.f_estadisticas_ba(f_MG)
tab_rank_MG["df_1_tabla"]
Out[ ]:
medida valor descripcion
0 ops totales 25.000000 operaciones totales
1 ganadoras 14.000000 operaciones ganadoras
2 ganadoras_c 5.000000 operaciones ganadoras de compra
3 ganadoras_v 9.000000 operaciones ganadoras de venta
4 perdedoras 11.000000 operaciones perdedoras
5 perdedoras_c 8.000000 operaciones perdedoras de compra
6 perdedoras_v 3.000000 operaciones perdedoras de venta
7 mediana (profit) 0.006000 mediana de profit de operaciones
8 mediana (pips) 0.004000 mediana de pips de operaciones
9 r_efectividad 0.560000 ganadoras totales/operaciones totales
10 r_proporcion 1.272727 ganadoras totales/perdedoras totales
11 r_efectividad_c 0.200000 ganadoras compras/operaciones totales
12 r_efectividad_v 0.360000 ganadoras ventas/operaciones totales

4. Ranking of Positions by team member¶

In [ ]:
# Fernanda Amador
tab_rank_FA["df_2_ranking"]
Out[ ]:
Symbol Rank
0 EURUSD 57.142857
1 GBPJPY 50.000000
2 GBPUSD 50.000000
3 USDCHF 50.000000
4 EURGBP 33.333333
5 USDCAD 20.000000
6 USDMXN 0.000000
In [ ]:
# Ana Dürrmüller
tab_rank_AD["df_2_ranking"]
Out[ ]:
Symbol Rank
0 USDCHF 83.333333
1 EURGBP 50.000000
2 USDJPY 33.333333
3 USDCAD 25.000000
4 EURUSD 0.000000
5 GBPJPY 0.000000
6 GBPUSD 0.000000
In [ ]:
# Gerardo Gonzalez
tab_rank_GG["df_2_ranking"]
Out[ ]:
Symbol Rank
0 EURGBP 100.000000
1 USDCHF 100.000000
2 EURMXN 66.666667
3 EURNOK 50.000000
4 USDMXN 50.000000
5 GBPJPY 25.000000
6 USDCAD 25.000000
7 EURUSD 20.000000
8 EURCHF 0.000000
9 GBPUSD 0.000000
In [ ]:
# Maximiliano García
tab_rank_MG["df_2_ranking"]
Out[ ]:
Symbol Rank
0 GBPJPY 100.000000
1 GBPUSD 100.000000
2 NZDUSD 100.000000
3 USDCAD 75.000000
4 EURGBP 66.666667
5 EURUSD 50.000000
6 USDJPY 50.000000
7 AUDUSD 0.000000
8 EURJPY 0.000000
9 USDMXN 0.000000

5. Métricas de Atribución al Desempeño¶

In [ ]:
# Fernanda Amador
mad_df_FA = functions.f_evolucion_capital(f_FA)
mad_df_FA
Out[ ]:
profit_d profit_acm_d
timestamp
2023-02-21 -0.02800 99999.97200
2023-02-23 -1.23900 99998.73300
2023-02-24 -1.18111 99997.55189
2023-02-27 8.98400 100006.53589
2023-02-28 -96.80162 99909.73427
2023-03-01 -0.33300 99909.40127
2023-03-02 -1.40560 99907.99567
In [ ]:
# Ana Dürrmüller 
mad_df_AD = functions.f_evolucion_capital(f_AD)
mad_df_AD
Out[ ]:
profit_d profit_acm_d
timestamp
2023-02-28 -0.10819 99999.89181
2023-03-01 -55.22389 99944.66792
2023-03-02 -319.43170 99625.23622
In [ ]:
# Gerardo Gonzalez
mad_df_GG = functions.f_evolucion_capital(f_GG)
mad_df_GG
Out[ ]:
profit_d profit_acm_d
timestamp
2023-02-24 15.23086 100015.23086
2023-02-28 -7.80069 100007.43017
2023-03-01 -12.63869 99994.79148
2023-03-02 -25.02336 99969.76812
2023-03-03 0.73810 99970.50622
In [ ]:
# Maximiliano García
mad_df_MG = functions.f_evolucion_capital(f_MG)
mad_df_MG
Out[ ]:
profit_d profit_acm_d
timestamp
2023-02-28 -8.36400 99991.63600
2023-03-01 123.47400 100115.11000
2023-03-02 -1.86150 100113.24850
2023-03-03 -68.80696 100044.44154

6. Estadísticas¶

In [ ]:
benchmark_df = functions.f_benchmark("files/sp500.csv")
In [ ]:
#Fernanda Amador
mad_statistics_FA, mad_hist_FA = functions.f_estadisticas_mad(mad_df_FA,benchmark_df)
mad_statistics_FA
Out[ ]:
metrica unidad valor descripcion
0 sharpe_original Cantidad -124.970938 Sharpe Ratio Fórmula Original
1 sharpe_actualizado Cantidad 0.078069 Sharpe Ratio Fórmula Ajustada
2 drawdown_capi Fecha Inicial 2023-02-21 Fecha inicial del DrawDown de Capital
3 drawdown_capi Fecha Final 2023-03-02 Fecha final del DrawDown de Capital
4 drawdown_capi DrawDown $ (capital) -91.97633 Máxima pérdida flotante registrada
5 drawup_capi Fecha Inicial 2023-03-02 Fecha inicial del DrawUp de Capital
6 drawup_capi Fecha Final 2023-03-02 Fecha final del DrawUp de Capital
7 drawup_capi DrawDown $ (capital) 8.984 Máxima ganancia flotante registrada
In [ ]:
# Ana Sofía Durrmuller
mad_statistics_AD, mad_hist_AD = functions.f_estadisticas_mad(mad_df_AD,benchmark_df)
mad_statistics_AD
Out[ ]:
metrica unidad valor descripcion
0 sharpe_original Cantidad -27.697276 Sharpe Ratio Fórmula Original
1 sharpe_actualizado Cantidad -0.311013 Sharpe Ratio Fórmula Ajustada
2 drawdown_capi Fecha Inicial 2023-02-28 Fecha inicial del DrawDown de Capital
3 drawdown_capi Fecha Final 2023-03-02 Fecha final del DrawDown de Capital
4 drawdown_capi DrawDown $ (capital) -374.65559 Máxima pérdida flotante registrada
5 drawup_capi Fecha Inicial 2023-03-02 Fecha inicial del DrawUp de Capital
6 drawup_capi Fecha Final 2023-03-02 Fecha final del DrawUp de Capital
7 drawup_capi DrawDown $ (capital) -0.10819 Máxima ganancia flotante registrada
In [ ]:
# Gerardo Gonzalez 
mad_statistics_GG, mad_hist_GG = functions.f_estadisticas_mad(mad_df_GG,benchmark_df)
mad_statistics_GG
Out[ ]:
metrica unidad valor descripcion
0 sharpe_original Cantidad -465.704423 Sharpe Ratio Fórmula Original
1 sharpe_actualizado Cantidad -0.53389 Sharpe Ratio Fórmula Ajustada
2 drawdown_capi Fecha Inicial 2023-02-24 Fecha inicial del DrawDown de Capital
3 drawdown_capi Fecha Final 2023-03-03 Fecha final del DrawDown de Capital
4 drawdown_capi DrawDown $ (capital) -44.72464 Máxima pérdida flotante registrada
5 drawup_capi Fecha Inicial 2023-03-02 Fecha inicial del DrawUp de Capital
6 drawup_capi Fecha Final 2023-03-03 Fecha final del DrawUp de Capital
7 drawup_capi DrawDown $ (capital) 15.23086 Máxima ganancia flotante registrada
In [ ]:
#Maximiliano García
mad_statistics_MG, mad_hist_MG = functions.f_estadisticas_mad(mad_df_MG,benchmark_df)
mad_statistics_MG
Out[ ]:
metrica unidad valor descripcion
0 sharpe_original Cantidad -51.076936 Sharpe Ratio Fórmula Original
1 sharpe_actualizado Cantidad -0.534867 Sharpe Ratio Fórmula Ajustada
2 drawdown_capi Fecha Inicial 2023-02-28 Fecha inicial del DrawDown de Capital
3 drawdown_capi Fecha Final 2023-03-03 Fecha final del DrawDown de Capital
4 drawdown_capi DrawDown $ (capital) 52.80554 Máxima pérdida flotante registrada
5 drawup_capi Fecha Inicial 2023-03-03 Fecha inicial del DrawUp de Capital
6 drawup_capi Fecha Final 2023-03-03 Fecha final del DrawUp de Capital
7 drawup_capi DrawDown $ (capital) 123.474 Máxima ganancia flotante registrada
In [ ]:
#Fernanda Amador
mad_hist_FA
Out[ ]:
profit_d profit_acm_d timestamp max_capital drawdown
timestamp
2023-02-21 -0.02800 99999.97200 2023-02-21 99999.97200 0.000000
2023-02-23 -1.23900 99998.73300 2023-02-23 99999.97200 0.000012
2023-02-24 -1.18111 99997.55189 2023-02-24 99999.97200 0.000024
2023-02-27 8.98400 100006.53589 2023-02-27 100006.53589 0.000000
2023-02-28 -96.80162 99909.73427 2023-02-28 100006.53589 0.000968
2023-03-01 -0.33300 99909.40127 2023-03-01 100006.53589 0.000971
2023-03-02 -1.40560 99907.99567 2023-03-02 100006.53589 0.000985
In [ ]:
#Ana Durrmuller
mad_hist_AD
Out[ ]:
profit_d profit_acm_d timestamp max_capital drawdown
timestamp
2023-02-28 -0.10819 99999.89181 2023-02-28 99999.89181 0.000000
2023-03-01 -55.22389 99944.66792 2023-03-01 99999.89181 0.000552
2023-03-02 -319.43170 99625.23622 2023-03-02 99999.89181 0.003747
In [ ]:
#Gerardo Gonzalez
mad_hist_GG
Out[ ]:
profit_d profit_acm_d timestamp max_capital drawdown
timestamp
2023-02-24 15.23086 100015.23086 2023-02-24 100015.23086 0.000000
2023-02-28 -7.80069 100007.43017 2023-02-28 100015.23086 0.000078
2023-03-01 -12.63869 99994.79148 2023-03-01 100015.23086 0.000204
2023-03-02 -25.02336 99969.76812 2023-03-02 100015.23086 0.000455
2023-03-03 0.73810 99970.50622 2023-03-03 100015.23086 0.000447
In [ ]:
#Maximiliano García
mad_hist_MG
Out[ ]:
profit_d profit_acm_d timestamp max_capital drawdown
timestamp
2023-02-28 -8.36400 99991.63600 2023-02-28 99991.636 0.000000
2023-03-01 123.47400 100115.11000 2023-03-01 100115.110 0.000000
2023-03-02 -1.86150 100113.24850 2023-03-02 100115.110 0.000019
2023-03-03 -68.80696 100044.44154 2023-03-03 100115.110 0.000706

7. Visualización por Ranking¶

In [ ]:
#Fernanda Amador
ranking_FA = visualizations.ranking_vis(tab_rank_FA["df_2_ranking"])
ranking_FA.show(renderer = "notebook")
In [ ]:
#Ana Durrmuller
ranking_AD = visualizations.ranking_vis(tab_rank_AD["df_2_ranking"])
ranking_AD.show(renderer = "notebook")
In [ ]:
#Gerardo Gonzalez 
ranking_GG = visualizations.ranking_vis(tab_rank_GG["df_2_ranking"])
ranking_GG.show(renderer = "notebook")
In [ ]:
#Maximiliano García
ranking_MG = visualizations.ranking_vis(tab_rank_MG["df_2_ranking"])
ranking_MG.show(renderer = "notebook")

8. Behavioral Finance¶

In [ ]:
#Fernanda Amador
d_up_down_FA, de_FA = functions.f_behavioural_finance(f_FA)
d_up_down_FA['resultados']['dataframe']
Out[ ]:
ocurrencias status_quo aversion_perdida sensibilidad_decreciente
0 6 33.333333 0.0 No
In [ ]:
#Ana Durrmuller
d_up_down_AD, de_AD = functions.f_behavioural_finance(f_AD)
d_up_down_AD['resultados']['dataframe']
Out[ ]:
ocurrencias status_quo aversion_perdida sensibilidad_decreciente
0 6 0.0 16.666667 No
In [ ]:
#Gerardo Gonzalez
d_up_down_GG, de_GG = functions.f_behavioural_finance(f_GG)
d_up_down_GG['resultados']['dataframe']
Out[ ]:
ocurrencias status_quo aversion_perdida sensibilidad_decreciente
0 6 83.333333 16.666667 No
In [ ]:
#Maximiliano Garcia
d_up_down_MG, de_MG = functions.f_behavioural_finance(f_MG)
d_up_down_MG['resultados']['dataframe']
Out[ ]:
ocurrencias status_quo aversion_perdida sensibilidad_decreciente
0 5 100.0 20.0 No

9. DrawDown y DrawUp¶

In [ ]:
#Fernanda Amador
dd_du_FA = visualizations.drawdwn_vis(mad_hist_FA,mad_statistics_FA)
dd_du_FA.show(renderer = "notebook")
In [ ]:
#Ana Durrmuller
dd_du_AD = visualizations.drawdwn_vis(mad_hist_AD,mad_statistics_AD)
dd_du_AD.show(renderer = "notebook")
In [ ]:
#Gerardo Gonzalez
dd_du_GG = visualizations.drawdwn_vis(mad_hist_GG,mad_statistics_GG)
dd_du_GG.show(renderer = "notebook")
In [ ]:
#Maximiliano Garcia
dd_du_MG = visualizations.drawdwn_vis(mad_hist_MG,mad_statistics_MG)
dd_du_MG.show(renderer = "notebook")

10. Disposition Effect¶

In [ ]:
#Fernanda Amador 
dE_FA = visualizations.de_vis(d_up_down_FA["resultados"]["dataframe"],de_FA)
dE_FA.show(renderer = "notebook")
In [ ]:
#Ana Durrmuller
dE_AD = visualizations.de_vis(d_up_down_AD["resultados"]["dataframe"],de_AD)
dE_AD.show(renderer = "notebook")
In [ ]:
#Gerardo Gonzalez 
dE_GG = visualizations.de_vis(d_up_down_GG["resultados"]["dataframe"],de_GG)
dE_GG.show(renderer = "notebook")
In [ ]:
#Maximiliano García 
dE_MG = visualizations.de_vis(d_up_down_MG["resultados"]["dataframe"],de_MG)
dE_MG.show(renderer = "notebook")

11. Conclusiones¶

Este laboratorio nos ayudo a entender la capacidad del trader para analizar y mejorar su desempeño en el mercado. Si bien cada uno de nosotros implementó estrategias y técnicas de análisis diferentes, ninguno pudo obtener una ganancia significativa en sus operaciones con divisas. Aunque estos resultados pueden ser decepcionantes, el laboratorio de trading brindó una oportunidad valiosa para que experimentemos lo que siente un verdadero trader. Es importante recordar que el trading con divisas es una actividad que conlleva un alto nivel de riesgo y requiere habilidades y conocimientos especializados. Es normal experimentar pérdidas en el camino, especialmente para aquellos que están empezando en el mundo del trading.

En el caso de un trader, el valor esperado de los rendimientos se utiliza para evaluar el desempeño de su estrategia de trading. Si el valor esperado de los rendimientos es positivo, significa que la estrategia tiene una probabilidad de obtener ganancias en promedio. Por lo tanto, el trader puede utilizar esta medida para evaluar la eficacia de su estrategia y tomar decisiones de inversión informadas. El DrawDown y el DrawUp están estrechamente relacionados con el riesgo en una cuenta de trading. Ambas medidas son importantes para evaluar la rentabilidad y la gestión de riesgos de una cuenta de trading. Los traders deben monitorear regularmente estas medidas y ajustar sus estrategias de trading y gestión de riesgos en consecuencia para lograr un rendimiento óptimo.

12. Fuentes¶

  • Barberis, N., & Thaler, R. (2003). A survey of behavioral finance. Handbook of the Economics of Finance, 1, 1053-1128.
  • Goldberg, J., Von Nitzsch, R., & Morris, A. (2001). Behavioral finance. Chichester: John Wiley.